package com.edu.leetcode.dataStruct;

import java.util.ArrayList;
import java.util.List;

/**
 * @作者 five-five
 * @创建时间 2021/1/5
 */
public class Demo02 {
    public static void main(String[] args) {
        Demo02 demo02 = new Demo02();
        List<List<Integer>> abbxxxxzzy = demo02.largeGroupPositions("abcdddeeeeaabbbcd");
        abbxxxxzzy.forEach(System.out::println);
    }

    /**
     * 830.较大分组的位置
     * 例如，在字符串 s = "abbxxxxzyy" 中，就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。
     * 分组可以用区间 [start, end] 表示，其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。
     * 我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
     *
     * @param s
     * @return [[3, 5], [6, 9], [12, 14]]
     */
    public List<List<Integer>> largeGroupPositions(String s) {
        List<List<Integer>> nums = new ArrayList<>();
        if (s == null || s.length() < 2) {
            return nums;
        }
        s = s+" ";
        char[] chars = s.toCharArray();
        int i = 0;
        while (i < chars.length) {
            boolean flag = false;
            List<Integer> subs = new ArrayList<>();
            char before = chars[i];
            int count = 0;
            for (int j = i + 1; j < chars.length; j++) {
                char after = chars[j];
                //开始比较
                if (before == after) {
                    count++;
                    continue;
                }
                if ((before != after && count >= 2)) {
                    //说明长度够了
                    subs.add(i);
                    subs.add(j - 1);
                    nums.add(subs);
                    count = 0;
                    flag = true;
                    i = j;
                    break;
                }
                break;
            }
            if (!flag) {
                i++;
            }
        }
        return nums;
    }
}
